import { INestApplication } from '@nestjs/common';
import { getServerConfig } from '../ormconfig';
import rateLimit from 'express-rate-limit';
import * as express from 'express';
import { logger } from '@/common/log4js/logger.middleware';
import { mw as requestIpMw } from 'request-ip';
import { setupSwagger } from '@/configuration/setup-swagger.configuration';

export const setupApp = (app: INestApplication) => {
    const config = getServerConfig();
    console.log('config', config);
    // 设置 api 访问前缀
    // app.setGlobalPrefix(config.API_PREFIX);
    // 获取真实 ip
    app.use(requestIpMw({ attributeName: 'ip' }));
    // 日志
    app.use(express.json());  // 注意：除了错误级别的中间件，其他的中间件，必须在路由之前进行配置  通过 express.json() 这个中间件，解析表单中的 JSON 格式的数据
    app.use(express.urlencoded({ extended: true }));// 通过 express.urlencoded() 这个中间件，来解析表单中的 url-encoded 格式的数据
    app.use(logger);
    // rateLimit限流
    app.use(
        rateLimit({
            windowMs: 60 * 1000, // 1 minutes
            max: 300, // limit each IP to 100 requests per windowMs
        }),
    );
    //初始化Swagger文档
    setupSwagger(app);
    // helmet头部安全  开启导致 swagger不能通过内网访问
    // app.use(helmet());
    
};
